package com.demo.java.OD51_100.OD87;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.Stack;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【括号匹配】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145654521
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            String values = s.nextLine();  // 输入括号表达式
            HashMap<Character, Character> charMap = new HashMap<Character, Character>();  // 用于存储括号对应关系
            Set<Character> charSet = new HashSet<>();

            // 初始化括号对应关系
            charMap.put(')', '(');
            charMap.put(']', '[');
            charMap.put('}', '{');
            charSet.addAll(charMap.keySet());
            charSet.addAll(charMap.values());

            Stack<Character> charStack = new Stack<Character>();  // 用栈来存储括号
            char[] chars = values.toCharArray();  // 将输入字符串转换为字符数组

            // 遍历每个字符
            for (Character c : chars) {
                if (charSet.contains(c)) {  // 如果是括号
                    if (!charMap.containsKey(c)) {  // 如果是打开括号
                        charStack.push(c);  // 将打开括号压栈
                    } else {  // 如果是闭合括号
                        // 判断栈顶元素是否是匹配的开括号
                        Character peekValue = charStack.peek();
                        if (!peekValue.equals(charMap.get(c))) {  // 如果不匹配
                            System.out.println(false);
                            return;
                        } else {
                            charStack.pop();  // 匹配成功，弹栈
                        }
                    }
                }
            }
            // 判断栈是否为空，如果为空则表示括号完全匹配
            System.out.println(charStack.isEmpty());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("false");  // 异常情况，输出 false
        }
    }
}